package deduplication;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class contact {

        String civilite;
        String prenom;
        String deuxiemePrenom;
        String nom;
        String suffixe;
        String societe;
        String service;
        String titre;
        String rueBureau;
        String rueBureau2;
        String rueBureau3;
        String villeBureau;
        String depRegionBureau;
        String codePostalBureau;
        String paysBureau;
        String rueDomicile;
        String rueDomicile2;
        String rueDomicile3;
        String villeDomicile;
        String depRegionDomicile;
        String codePostalDomicile;
        String paysDomicile;
        String rueAutre;
        String rueAutre2;
        String rueAutre3;
        String villeAutre;
        String depRegionAutre;
        String codePostalAutre;
        String paysAutre;
        String telephoneDeLAssistantE;
        String telecopieBureau;
        String telephoneBureau;
        String telephone2Bureau;
        String rappel;
        String telephoneVoiture;
        String telephonesociete;
        String telecopieDomicile;
        String telephoneDomicile;
        String telephone2Domicile;
        String rnis;
        String telMobile;
        String telecopieAutre;
        String telephoneAutre;
        String recepteurDeRadiomessagerie;
        String telephonePrincipal;
        String radioTelephone;
        String telephoneTddTty;
        String telex;
        String adresseDeMessagerie;
        String typeDeMessagerie;
        String nomCompletDeLAdresseDeMessagerie;
        String adresseDeMessagerie2;
        String typeDeMessagerie2;
        String nomCompletDeLAdresseDeMessagerie2;
        String adresseDeMessagerie3;
        String typeDeMessagerie3;
        String nomCompletDeLAdresseDeMessagerie3;
        String anniversaire;
        String anniversaireDeMariageOuFete;
        String autreBoitePostale;
        String bPProfessionnelle;
        String boitePostaleDuDomicile;
        String bureau;
        String categories;
        String codeGouvernement;
        String compte;
        String conjointE;
        String critereDeDiffusion;
        String disponibiliteInternet;
        String emplacement;
        String enfants;
        String informationsFacturation;
        String initiales;
        String kilometrage;
        String langue;
        String motsCles;
        String nomDeLAssistantE;
        String notes;
        String numeroDIdentificationDeLOrganisation;
        String pageWeb;
        String passeTemps;
        String priorite;
        String prive;
        String profession;
        String recommandePar;
        String responsable;
        String serveurDAnnuaire;
        String sexe;
        String utilisateur1;
        String utilisateur2;
        String utilisateur3;
        String utilisateur4;
        int id;
        Boolean actif;
        static String REGEXP = "[ -&]";
        private HashMap<String,typeTelephone> telephones;
        private HashMap<String,String> emails;
        
static int nb;
static {nb=0;}

public contact() {
        super();
        nb+=1;
        setId(nb);
        actif = true;
    }

private String removeQuotes(String value, String stringEncloser) {

    if (value == null || value.equals("") || value.equals("\"\"")) return null;
    
    int start = 0;
    int end = value.length();
    String result;

    if (value.startsWith(stringEncloser)) start = stringEncloser.length();
    if (value.endsWith(stringEncloser)) end -= stringEncloser.length();
    assert(start > 0 && start < value.length());
    assert(end > 0 && end > start && end <= value.length());
    try {
        result = value.substring(start, end);
    } catch(StringIndexOutOfBoundsException e){
        System.err.println("Trying to extract substring from " + value + " from " + start + "to "+ end);
        e.printStackTrace();
        return null;
    }
    if (result.equals(""))  return null;
    else return result;
}

public contact(ArrayList<String> values) {
    super();
    if (values.size()>0) this.civilite = removeQuotes(values.get(0),"\"");
    if (values.size()>1) this.prenom = removeQuotes(values.get(1),"\"");
    if (values.size()>2) this.deuxiemePrenom = removeQuotes(values.get(2),"\"");
    if (values.size()>3) this.nom = removeQuotes(values.get(3),"\"");
    if (values.size()>4) this.suffixe = removeQuotes(values.get(4),"\"");
    if (values.size()>5) this.societe = removeQuotes(values.get(5),"\"");
    if (values.size()>6) this.service = removeQuotes(values.get(6),"\"");
    if (values.size()>7) this.titre = removeQuotes(values.get(7),"\"");
    if (values.size()>8) this.rueBureau = removeQuotes(values.get(8),"\"");
    if (values.size()>9) this.rueBureau2 = removeQuotes(values.get(9),"\"");
    if (values.size()>10) this.rueBureau3 = removeQuotes(values.get(10),"\"");
    if (values.size()>11) this.villeBureau = removeQuotes(values.get(11),"\"");
    if (values.size()>12) this.depRegionBureau = removeQuotes(values.get(12),"\"");
    if (values.size()>13) this.codePostalBureau = removeQuotes(values.get(13),"\"");
    if (values.size()>14) this.paysBureau = removeQuotes(values.get(14),"\"");
    if (values.size()>15) this.rueDomicile = removeQuotes(values.get(15),"\"");
    if (values.size()>16) this.rueDomicile2 = removeQuotes(values.get(16),"\"");
    if (values.size()>17) this.rueDomicile3 = removeQuotes(values.get(17),"\"");
    if (values.size()>18) this.villeDomicile = removeQuotes(values.get(18),"\"");
    if (values.size()>19) this.depRegionDomicile = removeQuotes(values.get(19),"\"");
    if (values.size()>20) this.codePostalDomicile = removeQuotes(values.get(20),"\"");
    if (values.size()>21) this.paysDomicile = removeQuotes(values.get(21),"\"");
    if (values.size()>22) this.rueAutre = removeQuotes(values.get(22),"\"");
    if (values.size()>23) this.rueAutre2 = removeQuotes(values.get(23),"\"");
    if (values.size()>24) this.rueAutre3 = removeQuotes(values.get(24),"\"");
    if (values.size()>25) this.villeAutre = removeQuotes(values.get(25),"\"");
    if (values.size()>26) this.depRegionAutre = removeQuotes(values.get(26),"\"");
    if (values.size()>27) this.codePostalAutre = removeQuotes(values.get(27),"\"");
    if (values.size()>28) this.paysAutre = removeQuotes(values.get(28),"\"");
    if (values.size()>29) this.telephoneDeLAssistantE = formatTelephone(removeQuotes(values.get(29),"\""));
    if (values.size()>30) this.telecopieBureau = formatTelephone(removeQuotes(values.get(30),"\""));
    if (values.size()>31) this.telephoneBureau = formatTelephone(removeQuotes(values.get(31),"\""));
    if (values.size()>32) this.telephone2Bureau = formatTelephone(removeQuotes(values.get(32),"\""));
    if (values.size()>33) this.rappel = removeQuotes(values.get(33),"\"");
    if (values.size()>34) this.telephoneVoiture = formatTelephone(removeQuotes(values.get(34),"\""));
    if (values.size()>35) this.telephonesociete = formatTelephone(removeQuotes(values.get(35),"\""));
    if (values.size()>36) this.telecopieDomicile = formatTelephone(removeQuotes(values.get(36),"\""));
    if (values.size()>37) this.telephoneDomicile = formatTelephone(removeQuotes(values.get(37),"\""));
    if (values.size()>38) this.telephone2Domicile = formatTelephone(removeQuotes(values.get(38),"\""));
    if (values.size()>39) this.rnis = formatTelephone(removeQuotes(values.get(39),"\""));
    if (values.size()>40) this.telMobile = formatTelephone(removeQuotes(values.get(40),"\""));
    if (values.size()>41) this.telecopieAutre = formatTelephone(removeQuotes(values.get(41),"\""));
    if (values.size()>42) this.telephoneAutre = formatTelephone(removeQuotes(values.get(42),"\""));
    if (values.size()>43) this.recepteurDeRadiomessagerie = removeQuotes(values.get(43),"\"");
    if (values.size()>44) this.telephonePrincipal = formatTelephone(removeQuotes(values.get(44),"\""));
    if (values.size()>45) this.radioTelephone = removeQuotes(values.get(45),"\"");
    if (values.size()>46) this.telephoneTddTty = removeQuotes(values.get(46),"\"");
    if (values.size()>47) this.telex = removeQuotes(values.get(47),"\"");
    if (values.size()>48) this.adresseDeMessagerie = eMailAdress(removeQuotes(values.get(48),"\""));
    if (values.size()>49) this.typeDeMessagerie = removeQuotes(values.get(49),"\"");
    if (values.size()>50) this.nomCompletDeLAdresseDeMessagerie = removeQuotes(values.get(50),"\"");
    if (values.size()>51) this.adresseDeMessagerie2 = eMailAdress(removeQuotes(values.get(51),"\""));
    if (values.size()>52) this.typeDeMessagerie2 = removeQuotes(values.get(52),"\"");
    if (values.size()>53) this.nomCompletDeLAdresseDeMessagerie2 = removeQuotes(values.get(53),"\"");
    if (values.size()>54) this.adresseDeMessagerie3 = eMailAdress(removeQuotes(values.get(54),"\""));
    if (values.size()>55) this.typeDeMessagerie3 = removeQuotes(values.get(55),"\"");
    if (values.size()>56) this.nomCompletDeLAdresseDeMessagerie3 = removeQuotes(values.get(56),"\"");
    if (values.size()>57) this.anniversaire = removeQuotes(values.get(57),"\"");
    if (values.size()>58) this.anniversaireDeMariageOuFete = removeQuotes(values.get(58),"\"");
    if (values.size()>59) this.autreBoitePostale = removeQuotes(values.get(59),"\"");
    if (values.size()>60) this.bPProfessionnelle = removeQuotes(values.get(60),"\"");
    if (values.size()>61) this.boitePostaleDuDomicile = removeQuotes(values.get(61),"\"");
    if (values.size()>62) this.bureau = removeQuotes(values.get(62),"\"");
    if (values.size()>63) this.categories = removeQuotes(values.get(63),"\"");
    if (values.size()>64) this.codeGouvernement = removeQuotes(values.get(64),"\"");
    if (values.size()>65) this.compte = removeQuotes(values.get(65),"\"");
    if (values.size()>66) this.conjointE = removeQuotes(values.get(66),"\"");
    if (values.size()>67) this.critereDeDiffusion = removeQuotes(values.get(67),"\"");
    if (values.size()>68) this.disponibiliteInternet = removeQuotes(values.get(68),"\"");
    if (values.size()>69) this.emplacement = removeQuotes(values.get(69),"\"");
    if (values.size()>70) this.enfants = removeQuotes(values.get(70),"\"");
    if (values.size()>71) this.informationsFacturation = removeQuotes(values.get(71),"\"");
    if (values.size()>72) this.initiales = removeQuotes(values.get(72),"\"");
    if (values.size()>73) this.kilometrage = removeQuotes(values.get(73),"\"");
    if (values.size()>74) this.langue = removeQuotes(values.get(74),"\"");
    if (values.size()>75) this.motsCles = removeQuotes(values.get(75),"\"");
    if (values.size()>76) this.nomDeLAssistantE = removeQuotes(values.get(76),"\"");
    if (values.size()>77) this.notes = removeQuotes(values.get(77),"\"");
    if (values.size()>78) this.numeroDIdentificationDeLOrganisation = removeQuotes(values.get(78),"\"");
    if (values.size()>79) this.pageWeb = removeQuotes(values.get(79),"\"");
    if (values.size()>80) this.passeTemps = removeQuotes(values.get(80),"\"");
    if (values.size()>81) this.priorite = removeQuotes(values.get(81),"\"");
    if (values.size()>82) this.prive = removeQuotes(values.get(82),"\"");
    if (values.size()>83) this.profession = removeQuotes(values.get(83),"\"");
    if (values.size()>84) this.recommandePar = removeQuotes(values.get(84),"\"");
    if (values.size()>85) this.responsable = removeQuotes(values.get(85),"\"");
    if (values.size()>86) this.serveurDAnnuaire = removeQuotes(values.get(86),"\"");
    if (values.size()>87) this.sexe = removeQuotes(values.get(87),"\"");
    if (values.size()>88) this.utilisateur1 = removeQuotes(values.get(88),"\"");
    if (values.size()>89) this.utilisateur2 = removeQuotes(values.get(89),"\"");
    if (values.size()>90) this.utilisateur3 = removeQuotes(values.get(90),"\"");
    if (values.size()>91) this.utilisateur4 = removeQuotes(values.get(91),"\"");
    formatEmail();
    formatName();
    this.telephones = this.getTelephonesMap();
    this.emails = this.getEmailsMap();
    setId(nb);
    nb+=1;
    actif = true;
}

public String getNom() {
    String result = this.civilite;
    if (this.prenom!=null && !this.prenom.equals("")) {
        if (result!=null && result.equals("")) result += " " + prenom;
        else result = prenom;
    }
    if (this.deuxiemePrenom!=null && !this.deuxiemePrenom.equals("")) {
        if (result!=null && result.equals("")) result += " " + deuxiemePrenom;
        else result = deuxiemePrenom;
    }
    if (this.nom!=null && !this.nom.equals("")) {
        if (result!=null && !result.equals("")) result += " " + nom;
        else result = nom;
    }
    return result;
}

public void merge(contact doublon) {
    //TODO si le nom du doublon est plus long, le retenir voire tenter le split en considérant que la partie commune est le nom
    if((this.civilite==null || this.civilite.equals("")) && doublon.civilite!=null) this.civilite = doublon.civilite;
    if (this.nom!=null && doublon.nom!=null && !this.nom.toLowerCase().equals(doublon.nom.toLowerCase()) && (this.prenom==null || this.prenom.equals("")) && (doublon.prenom==null || doublon.prenom.equals(""))) {
        Set<String> o = new TreeSet<String>();
        Set<String> d = new TreeSet<String>();
        for (String s : this.nom.toLowerCase().split(REGEXP))
            o.add(s);
        for (String s : doublon.nom.toLowerCase().split(REGEXP))
            d.add(s);
            if (d.containsAll(o)) {
                int i = doublon.nom.toLowerCase().indexOf(this.nom.toLowerCase());
                this.prenom = (doublon.nom.substring(0, i)).trim() + " " + (doublon.nom.substring(i+this.nom.length())).trim();
            } else if (o.containsAll(d)) {
                int i = this.nom.toLowerCase().indexOf(doublon.nom.toLowerCase());
                this.prenom = (this.nom.substring(0, i)).trim() + " " + (this.nom.substring(i+doublon.nom.length())).trim();
                this.nom=doublon.prenom;
        }
    }
    if (doublon.prenom!=null && this.nom!=null && doublon.prenom.toLowerCase().equals(this.nom.toLowerCase())) {
        if (this.prenom==null || this.prenom.equals("")) {
            this.prenom=this.nom;
            this.nom=doublon.nom;
        }
    } else
        if (doublon.nom!=null && this.prenom!=null && doublon.nom.toLowerCase().equals(this.prenom.toLowerCase())) {
            if (this.nom==null || this.nom.equals("")) {
                this.nom=this.prenom;
                this.prenom=doublon.prenom;
            }
        } else {
            if((this.prenom==null || this.prenom.equals("")) && doublon.prenom!=null) this.prenom = doublon.prenom;
            if((this.nom==null || this.nom.equals("")) && doublon.nom!=null) this.nom = doublon.nom;
        }
    if((this.deuxiemePrenom==null || this.deuxiemePrenom.equals("")) && doublon.deuxiemePrenom!=null) this.deuxiemePrenom = doublon.deuxiemePrenom;
    if((this.suffixe==null || this.suffixe.equals("")) && doublon.suffixe!=null) this.suffixe = doublon.suffixe;
    formatName();
    if((this.societe==null || this.societe.equals("")) && doublon.societe!=null) this.societe = doublon.societe;
    if((this.service==null || this.service.equals("")) && doublon.service!=null) this.service = doublon.service;
    if((this.titre==null || this.titre.equals("")) && doublon.titre!=null) this.titre = doublon.titre;
    if((this.rueBureau==null || this.rueBureau.equals("")) && doublon.rueBureau!=null) this.rueBureau = doublon.rueBureau;
    if((this.rueBureau2==null || this.rueBureau2.equals("")) && doublon.rueBureau2!=null) this.rueBureau2 = doublon.rueBureau2;
    if((this.rueBureau3==null || this.rueBureau3.equals("")) && doublon.rueBureau3!=null) this.rueBureau3 = doublon.rueBureau3;
    if((this.villeBureau==null || this.villeBureau.equals("")) && doublon.villeBureau!=null) this.villeBureau = doublon.villeBureau;
    if((this.depRegionBureau==null || this.depRegionBureau.equals("")) && doublon.depRegionBureau!=null) this.depRegionBureau = doublon.depRegionBureau;
    if((this.codePostalBureau==null || this.codePostalBureau.equals("")) && doublon.codePostalBureau!=null) this.codePostalBureau = doublon.codePostalBureau;
    if((this.paysBureau==null || this.paysBureau.equals("")) && doublon.paysBureau!=null) this.paysBureau = doublon.paysBureau;
    if((this.rueDomicile==null || this.rueDomicile.equals("")) && doublon.rueDomicile!=null) this.rueDomicile = doublon.rueDomicile;
    if((this.rueDomicile2==null || this.rueDomicile2.equals("")) && doublon.rueDomicile2!=null) this.rueDomicile2 = doublon.rueDomicile2;
    if((this.rueDomicile3==null || this.rueDomicile3.equals("")) && doublon.rueDomicile3!=null) this.rueDomicile3 = doublon.rueDomicile3;
    if((this.villeDomicile==null || this.villeDomicile.equals("")) && doublon.villeDomicile!=null) this.villeDomicile = doublon.villeDomicile;
    if((this.depRegionDomicile==null || this.depRegionDomicile.equals("")) && doublon.depRegionDomicile!=null) this.depRegionDomicile = doublon.depRegionDomicile;
    if((this.codePostalDomicile==null || this.codePostalDomicile.equals("")) && doublon.codePostalDomicile!=null) this.codePostalDomicile = doublon.codePostalDomicile;
    if((this.paysDomicile==null || this.paysDomicile.equals("")) && doublon.paysDomicile!=null) this.paysDomicile = doublon.paysDomicile;
    if((this.rueAutre==null || this.rueAutre.equals("")) && doublon.rueAutre!=null) this.rueAutre = doublon.rueAutre;
    if((this.rueAutre2==null || this.rueAutre2.equals("")) && doublon.rueAutre2!=null) this.rueAutre2 = doublon.rueAutre2;
    if((this.rueAutre3==null || this.rueAutre3.equals("")) && doublon.rueAutre3!=null) this.rueAutre3 = doublon.rueAutre3;
    if((this.villeAutre==null || this.villeAutre.equals("")) && doublon.villeAutre!=null) this.villeAutre = doublon.villeAutre;
    if((this.depRegionAutre==null || this.depRegionAutre.equals("")) && doublon.depRegionAutre!=null) this.depRegionAutre = doublon.depRegionAutre;
    if((this.codePostalAutre==null || this.codePostalAutre.equals("")) && doublon.codePostalAutre!=null) this.codePostalAutre = doublon.codePostalAutre;
    if((this.paysAutre==null || this.paysAutre.equals("")) && doublon.paysAutre!=null) this.paysAutre = doublon.paysAutre;
    if((this.telephoneDeLAssistantE==null || this.telephoneDeLAssistantE.equals("")) && doublon.telephoneDeLAssistantE!=null) this.telephoneDeLAssistantE = doublon.telephoneDeLAssistantE;
    if((this.telecopieBureau==null || this.telecopieBureau.equals("")) && doublon.telecopieBureau!=null) this.telecopieBureau = doublon.telecopieBureau;
    if((this.telephoneBureau==null || this.telephoneBureau.equals("")) && doublon.telephoneBureau!=null) this.telephoneBureau = doublon.telephoneBureau;
    if((this.telephone2Bureau==null || this.telephone2Bureau.equals("")) && doublon.telephone2Bureau!=null) this.telephone2Bureau = doublon.telephone2Bureau;
    if((this.rappel==null || this.rappel.equals("")) && doublon.rappel!=null) this.rappel = doublon.rappel;
    if((this.telephoneVoiture==null || this.telephoneVoiture.equals("")) && doublon.telephoneVoiture!=null) this.telephoneVoiture = doublon.telephoneVoiture;
    if((this.telephonesociete==null || this.telephonesociete.equals("")) && doublon.telephonesociete!=null) this.telephonesociete = doublon.telephonesociete;
    if((this.telecopieDomicile==null || this.telecopieDomicile.equals("")) && doublon.telecopieDomicile!=null) this.telecopieDomicile = doublon.telecopieDomicile;
    if((this.telephoneDomicile==null || this.telephoneDomicile.equals("")) && doublon.telephoneDomicile!=null) this.telephoneDomicile = doublon.telephoneDomicile;
    if((this.telephone2Domicile==null || this.telephone2Domicile.equals("")) && doublon.telephone2Domicile!=null) this.telephone2Domicile = doublon.telephone2Domicile;
    if((this.rnis==null || this.rnis.equals("")) && doublon.rnis!=null) this.rnis = doublon.rnis;
    if((this.telMobile==null || this.telMobile.equals("")) && doublon.telMobile!=null) this.telMobile = doublon.telMobile;
    if((this.telecopieAutre==null || this.telecopieAutre.equals("")) && doublon.telecopieAutre!=null) this.telecopieAutre = doublon.telecopieAutre;
    if((this.telephoneAutre==null || this.telephoneAutre.equals("")) && doublon.telephoneAutre!=null) this.telephoneAutre = doublon.telephoneAutre;
    if((this.recepteurDeRadiomessagerie==null || this.recepteurDeRadiomessagerie.equals("")) && doublon.recepteurDeRadiomessagerie!=null) this.recepteurDeRadiomessagerie = doublon.recepteurDeRadiomessagerie;
    if((this.telephonePrincipal==null || this.telephonePrincipal.equals("")) && doublon.telephonePrincipal!=null) this.telephonePrincipal = doublon.telephonePrincipal;
    if((this.radioTelephone==null || this.radioTelephone.equals("")) && doublon.radioTelephone!=null) this.radioTelephone = doublon.radioTelephone;
    if((this.telephoneTddTty==null || this.telephoneTddTty.equals("")) && doublon.telephoneTddTty!=null) this.telephoneTddTty = doublon.telephoneTddTty;
    if((this.telex==null || this.telex.equals("")) && doublon.telex!=null) this.telex = doublon.telex;
    if((this.adresseDeMessagerie==null || this.adresseDeMessagerie.equals("")) && doublon.adresseDeMessagerie!=null) this.adresseDeMessagerie = doublon.adresseDeMessagerie;
    if((this.typeDeMessagerie==null || this.typeDeMessagerie.equals("")) && doublon.typeDeMessagerie!=null) this.typeDeMessagerie = doublon.typeDeMessagerie;
    if((this.nomCompletDeLAdresseDeMessagerie==null || this.nomCompletDeLAdresseDeMessagerie.equals("")) && doublon.nomCompletDeLAdresseDeMessagerie!=null) this.nomCompletDeLAdresseDeMessagerie = doublon.nomCompletDeLAdresseDeMessagerie;
    if((this.adresseDeMessagerie2==null || this.adresseDeMessagerie2.equals("")) && doublon.adresseDeMessagerie2!=null) this.adresseDeMessagerie2 = doublon.adresseDeMessagerie2;
    if((this.typeDeMessagerie2==null || this.typeDeMessagerie2.equals("")) && doublon.typeDeMessagerie2!=null) this.typeDeMessagerie2 = doublon.typeDeMessagerie2;
    if((this.nomCompletDeLAdresseDeMessagerie2==null || this.nomCompletDeLAdresseDeMessagerie2.equals("")) && doublon.nomCompletDeLAdresseDeMessagerie2!=null) this.nomCompletDeLAdresseDeMessagerie2 = doublon.nomCompletDeLAdresseDeMessagerie2;
    if((this.adresseDeMessagerie3==null || this.adresseDeMessagerie3.equals("")) && doublon.adresseDeMessagerie3!=null) this.adresseDeMessagerie3 = doublon.adresseDeMessagerie3;
    if((this.typeDeMessagerie3==null || this.typeDeMessagerie3.equals("")) && doublon.typeDeMessagerie3!=null) this.typeDeMessagerie3 = doublon.typeDeMessagerie3;
    if((this.nomCompletDeLAdresseDeMessagerie3==null || this.nomCompletDeLAdresseDeMessagerie3.equals("")) && doublon.nomCompletDeLAdresseDeMessagerie3!=null) this.nomCompletDeLAdresseDeMessagerie3 = doublon.nomCompletDeLAdresseDeMessagerie3;
    if((this.anniversaire==null || this.anniversaire.equals("")) && doublon.anniversaire!=null) this.anniversaire = doublon.anniversaire;
    if((this.anniversaireDeMariageOuFete==null || this.anniversaireDeMariageOuFete.equals("")) && doublon.anniversaireDeMariageOuFete!=null) this.anniversaireDeMariageOuFete = doublon.anniversaireDeMariageOuFete;
    if((this.autreBoitePostale==null || this.autreBoitePostale.equals("")) && doublon.autreBoitePostale!=null) this.autreBoitePostale = doublon.autreBoitePostale;
    if((this.bPProfessionnelle==null || this.bPProfessionnelle.equals("")) && doublon.bPProfessionnelle!=null) this.bPProfessionnelle = doublon.bPProfessionnelle;
    if((this.boitePostaleDuDomicile==null || this.boitePostaleDuDomicile.equals("")) && doublon.boitePostaleDuDomicile!=null) this.boitePostaleDuDomicile = doublon.boitePostaleDuDomicile;
    if((this.bureau==null || this.bureau.equals("")) && doublon.bureau!=null) this.bureau = doublon.bureau;
    if((this.categories==null || this.categories.equals("")) && doublon.categories!=null) this.categories = doublon.categories;
    if((this.codeGouvernement==null || this.codeGouvernement.equals("")) && doublon.codeGouvernement!=null) this.codeGouvernement = doublon.codeGouvernement;
    if((this.compte==null || this.compte.equals("")) && doublon.compte!=null) this.compte = doublon.compte;
    if((this.conjointE==null || this.conjointE.equals("")) && doublon.conjointE!=null) this.conjointE = doublon.conjointE;
    if((this.critereDeDiffusion==null || this.critereDeDiffusion.equals("")) && doublon.critereDeDiffusion!=null) this.critereDeDiffusion = doublon.critereDeDiffusion;
    if((this.disponibiliteInternet==null || this.disponibiliteInternet.equals("")) && doublon.disponibiliteInternet!=null) this.disponibiliteInternet = doublon.disponibiliteInternet;
    if((this.emplacement==null || this.emplacement.equals("")) && doublon.emplacement!=null) this.emplacement = doublon.emplacement;
    if((this.enfants==null || this.enfants.equals("")) && doublon.enfants!=null ) this.enfants = doublon.enfants;
    if((this.informationsFacturation==null || this.informationsFacturation.equals("")) && doublon.informationsFacturation!=null) this.informationsFacturation = doublon.informationsFacturation;
    if((this.initiales==null || this.initiales.equals("")) && doublon.initiales!=null) this.initiales = doublon.initiales;
    if((this.kilometrage==null || this.kilometrage.equals("")) && doublon.kilometrage!=null) this.kilometrage = doublon.kilometrage;
    if((this.langue==null || this.langue.equals("")) && doublon.langue!=null) this.langue = doublon.langue;
    if((this.motsCles==null || this.motsCles.equals("")) && doublon.motsCles!=null) this.motsCles = doublon.motsCles;
    if((this.nomDeLAssistantE==null || this.nomDeLAssistantE.equals("")) && doublon.nomDeLAssistantE!=null) this.nomDeLAssistantE = doublon.nomDeLAssistantE;
    if((this.notes==null || this.notes.equals("")) && doublon.notes!=null ) this.notes = doublon.notes;
    if((this.numeroDIdentificationDeLOrganisation==null || this.numeroDIdentificationDeLOrganisation.equals("")) && doublon.numeroDIdentificationDeLOrganisation!=null) this.numeroDIdentificationDeLOrganisation = doublon.numeroDIdentificationDeLOrganisation;
    if((this.pageWeb==null || this.pageWeb.equals("")) && doublon.pageWeb!=null) this.pageWeb = doublon.pageWeb;
    if((this.passeTemps==null || this.passeTemps.equals("")) && doublon.passeTemps!=null) this.passeTemps = doublon.passeTemps;
    if((this.priorite==null || this.priorite.equals("")) && doublon.priorite!=null ) this.priorite = doublon.priorite;
    if((this.prive==null || this.prive.equals("")) && doublon.prive!=null) this.prive = doublon.prive;
    if((this.profession==null || this.profession.equals("")) && doublon.profession!=null ) this.profession = doublon.profession;
    if((this.recommandePar==null || this.recommandePar.equals("")) && doublon.recommandePar!=null ) this.recommandePar = doublon.recommandePar;
    if((this.responsable==null || this.responsable.equals("")) && doublon.responsable!=null) this.responsable = doublon.responsable;
    if((this.serveurDAnnuaire==null || this.serveurDAnnuaire.equals("")) && doublon.serveurDAnnuaire!=null) this.serveurDAnnuaire = doublon.serveurDAnnuaire;
    if((this.sexe==null || this.sexe.equals("")) && doublon.sexe!=null) this.sexe = doublon.sexe;
    if((this.utilisateur1==null || this.utilisateur1.equals("")) && doublon.utilisateur1!=null)
        this.utilisateur1 = doublon.utilisateur1;
    if((this.utilisateur2==null || this.utilisateur2.equals("")) && doublon.utilisateur2!=null) this.utilisateur2 = doublon.utilisateur2;
    if((this.utilisateur3==null || this.utilisateur3.equals("")) && doublon.utilisateur3!=null) this.utilisateur3 = doublon.utilisateur3;
    if((this.utilisateur4==null || this.utilisateur4.equals("")) && doublon.utilisateur4!=null) this.utilisateur4 = doublon.utilisateur4;
    this.telephones.putAll(doublon.telephones);
    this.emails.putAll(doublon.emails);

    doublon.actif = false;
}

public boolean equals(contact doublon) {
    Boolean bLeMeme = true;
    Set<String> o = new TreeSet<String>();
    if (this.nom!=null) {
        for (String s : this.nom.toLowerCase().split(REGEXP))
            o.add(s);
    }
    if (this.prenom!=null) {
        for (String s : this.prenom.toLowerCase().split(REGEXP))
            o.add(s);
    }
    if (this.civilite!=null) {
        for (String s : this.civilite.toLowerCase().split(REGEXP))
            o.add(s);
    }
    if (this.deuxiemePrenom!=null) {
        for (String s : this.deuxiemePrenom.toLowerCase().split(REGEXP))
            o.add(s);
    }
    if (this.suffixe!=null) {
        for (String s : this.suffixe.toLowerCase().split(REGEXP))
            o.add(s);
    }
    Set<String> setX = new TreeSet<String>();
    if (doublon.nom!=null) {
        for (String s : doublon.nom.toLowerCase().split(REGEXP))
            setX.add(s);
    }
    if (doublon.prenom!=null) {
        for (String s : doublon.prenom.toLowerCase().split(REGEXP))
            setX.add(s);
    }
    if (doublon.civilite!=null) {
        for (String s : doublon.civilite.toLowerCase().split(REGEXP))
            setX.add(s);
    }
    if (doublon.deuxiemePrenom!=null) {
        for (String s : doublon.deuxiemePrenom.toLowerCase().split(REGEXP))
            setX.add(s);
    }
    if (doublon.suffixe!=null){
        for (String s : doublon.suffixe.toLowerCase().split(REGEXP))
            setX.add(s);
    }
    if ( ((o.size()==0 || setX.size()==0) && o.size()!=setX.size()) || (o.size()>0 && setX.size()>0 && !((o.size()>=setX.size() && o.containsAll(setX)) || setX.containsAll(o)))) {
        bLeMeme = false;
    } else {
        o.clear();
        setX.clear();
        o.addAll(this.getTelephonesMap().keySet());
        setX.addAll(doublon.getTelephonesMap().keySet());    
        if ( ((o.size()==0 || setX.size()==0) && o.size()!=setX.size()) || (o.size()>0 && setX.size()>0 && !((o.size()>=setX.size() && o.containsAll(setX)) || setX.containsAll(o)))) {
            bLeMeme = false;
        } else {
            o.clear();
            setX.clear();
            o.addAll(this.getEmailsMap().keySet());
            setX.addAll(doublon.getEmailsMap().keySet());    
            if ( ((o.size()==0 || setX.size()==0) && o.size()!=setX.size()) || (o.size()>0 && setX.size()>0 && !((o.size()>=setX.size() && o.containsAll(setX)) || setX.containsAll(o)))) {
                bLeMeme = false;
            }
        }
    }
    
    if(bLeMeme && this.villeBureau!=null && !this.villeBureau.equals("") && doublon.villeBureau!=null && !doublon.villeBureau.equals("")) bLeMeme = this.villeBureau.toLowerCase().equals(doublon.villeBureau.toLowerCase());
    if(bLeMeme && this.villeDomicile!=null && !this.villeDomicile.equals("") && doublon.villeDomicile!=null && !doublon.villeDomicile.equals("")) bLeMeme = this.villeDomicile.toLowerCase().equals(doublon.villeDomicile.toLowerCase());
    if(bLeMeme && this.villeAutre!=null && !this.villeAutre.equals("") && doublon.villeAutre!=null && !doublon.villeAutre.equals("")) bLeMeme = this.villeAutre.toLowerCase().equals(doublon.villeAutre.toLowerCase());
    return bLeMeme;
}

public HashMap<String,typeTelephone> getTelephonesMap() {
    HashMap<String,typeTelephone> result = new HashMap<String,typeTelephone>();
    if (this.telephoneDeLAssistantE != null && !this.telephoneDeLAssistantE.equals("")) result.put(this.telephoneDeLAssistantE, typeTelephone.telephoneDeLAssistantE);
    if (this.telecopieBureau != null && !this.telecopieBureau.equals("")) result.put(this.telecopieBureau, typeTelephone.telecopieBureau);
    if (this.telephoneBureau != null && !this.telephoneBureau.equals("")) result.put(this.telephoneBureau, typeTelephone.telephoneBureau);
    if (this.telephone2Bureau != null && !this.telephone2Bureau.equals("")) result.put(this.telephone2Bureau, typeTelephone.telephone2Bureau);
    if (this.rappel != null && !this.rappel.equals("")) result.put(this.rappel, typeTelephone.rappel);
    if (this.telephoneVoiture != null && !this.telephoneVoiture.equals("")) result.put(this.telephoneVoiture, typeTelephone.telephoneVoiture);
    if (this.telephonesociete != null && !this.telephonesociete.equals("")) result.put(this.telephonesociete, typeTelephone.telephonesociete);
    if (this.telecopieDomicile != null && !this.telecopieDomicile.equals("")) result.put(this.telecopieDomicile, typeTelephone.telecopieDomicile);
    if (this.telephoneDomicile != null && !this.telephoneDomicile.equals("")) result.put(this.telephoneDomicile, typeTelephone.telephoneDomicile);
    if (this.telephone2Domicile != null && !this.telephone2Domicile.equals("")) result.put(this.telephone2Domicile, typeTelephone.telephone2Domicile);
    if (this.rnis != null && !this.rnis.equals("")) result.put(this.rnis, typeTelephone.rnis);
    if (this.telMobile != null && !this.telMobile.equals("")) result.put(this.telMobile, typeTelephone.telMobile);
    if (this.telecopieAutre != null && !this.telecopieAutre.equals("")) result.put(this.telecopieAutre, typeTelephone.telecopieAutre);
    if (this.telephoneAutre != null && !this.telephoneAutre.equals("")) result.put(this.telephoneAutre, typeTelephone.telephoneAutre);
    if (this.recepteurDeRadiomessagerie != null && !this.recepteurDeRadiomessagerie.equals("")) result.put(this.recepteurDeRadiomessagerie, typeTelephone.recepteurDeRadiomessagerie);
    if (this.telephonePrincipal != null && !this.telephonePrincipal.equals("")) result.put(this.telephonePrincipal, typeTelephone.telephonePrincipal);
    if (this.radioTelephone != null && !this.radioTelephone.equals("")) result.put(this.radioTelephone, typeTelephone.radioTelephone);
    if (this.telephoneTddTty != null && !this.telephoneTddTty.equals("")) result.put(this.telephoneTddTty, typeTelephone.telephoneTddTty);
    if (this.telex != null && !this.telex.equals("")) result.put(this.telex, typeTelephone.telex);
    return result;    
}

public HashMap<String,String> getEmailsMap() {
    HashMap<String,String> result = new HashMap<String,String>();
    
    if (this.adresseDeMessagerie != null && !this.adresseDeMessagerie.equals("")) {
        result.put(this.adresseDeMessagerie, this.typeDeMessagerie);
    }
    if (this.adresseDeMessagerie2 != null && !this.adresseDeMessagerie2.equals("")) {
        result.put(this.adresseDeMessagerie2, this.typeDeMessagerie2);
    }
    if (this.adresseDeMessagerie3 != null && !this.adresseDeMessagerie3.equals("")) {
        result.put(this.adresseDeMessagerie3, this.typeDeMessagerie3);
    }
    return result;    
    }

public void setTelephone(String numero, typeTelephone type) {
    switch (type) {
        case telephoneDeLAssistantE : this.telephoneDeLAssistantE = numero; break;
        case telecopieBureau : this.telecopieBureau = numero; break;
        case telephoneBureau : this.telephoneBureau = numero; break;
        case telephone2Bureau : this.telephone2Bureau = numero; break;
        case rappel : this.rappel = numero; break;
        case telephoneVoiture : this.telephoneVoiture = numero; break;
        case telephonesociete : this.telephonesociete = numero; break;
        case telecopieDomicile : this.telecopieDomicile = numero; break;
        case telephoneDomicile : this.telephoneDomicile = numero; break;
        case telephone2Domicile : this.telephone2Domicile = numero; break;
        case rnis : this.rnis = numero; break;
        case telMobile : this.telMobile = numero; break;
        case telecopieAutre : this.telecopieAutre = numero; break;
        case telephoneAutre : this.telephoneAutre = numero; break;
        case recepteurDeRadiomessagerie : this.recepteurDeRadiomessagerie = numero; break;
        case telephonePrincipal : this.telephonePrincipal = numero; break;
        case radioTelephone : this.radioTelephone = numero; break;
        case telephoneTddTty : this.telephoneTddTty = numero; break;
    }
}

public void razTelephones() {
    this.telephoneDeLAssistantE = null;
    this.telecopieBureau = null;
    this.telephoneBureau = null;
    this.telephone2Bureau =null;
    this.rappel = null;
    this.telephoneVoiture = null;
    this.telephonesociete = null;
    this.telecopieDomicile = null;
    this.telephoneDomicile = null;
    this.telephone2Domicile = null;
    this.rnis = null;
    this.telMobile = null;
    this.telecopieAutre = null;
    this.telephoneAutre = null;
    this.recepteurDeRadiomessagerie = null;
    this.telephonePrincipal = null;
    this.radioTelephone = null;
    this.telephoneTddTty = null;
    this.telex = null;

}

    /**
     * @param email
     * @param type of mail adresse
     */
    public void setMail(String email, String type) {
    if (this.adresseDeMessagerie == null) {
        this.adresseDeMessagerie = eMailAdress(email);
        this.typeDeMessagerie = type;
        this.nomCompletDeLAdresseDeMessagerie = this.getNom();
    } else if (this.adresseDeMessagerie2 == null) {
        this.adresseDeMessagerie2 = eMailAdress(email);
        this.typeDeMessagerie2 = type;
        this.nomCompletDeLAdresseDeMessagerie2 = this.getNom();
    } else if (this.adresseDeMessagerie3 == null) {
        this.adresseDeMessagerie3 = eMailAdress(email);
        this.typeDeMessagerie3 = type;
        this.nomCompletDeLAdresseDeMessagerie3 = this.getNom();
    }        
}

public void razEmails() {
    this.adresseDeMessagerie = null;
    this.typeDeMessagerie = null;
    this.nomCompletDeLAdresseDeMessagerie = null;
    this.adresseDeMessagerie2 = null;
    this.typeDeMessagerie2 = null;
    this.nomCompletDeLAdresseDeMessagerie2 = null;
    this.adresseDeMessagerie3 = null;
    this.typeDeMessagerie3 = null;
    this.nomCompletDeLAdresseDeMessagerie3 = null;
    }

public String toLine(String separator,String stringEncloser) {
    String result;

    if (!actif) return "Contact " + getId() + " supprimé";
        
    razTelephones();        
    for(Map.Entry<String,typeTelephone> t : this.telephones.entrySet()) {
        setTelephone(t.getKey(), t.getValue());
    }
    razEmails();
    for(Map.Entry<String,String> e : this.emails.entrySet()) {
        setMail(e.getKey(), e.getValue());        
    }

    if (( this.rueBureau!=null && this.villeBureau!=null && !(this.rueBureau+this.villeBureau).equals("")) ||
            (this.rueDomicile!=null && this.villeDomicile!= null && !(this.rueDomicile+this.villeDomicile).equals("")) ||
            (this.telephones.size()>0) ||
            (this.emails.size()>0) ||
            (this.pageWeb!=null && !this.pageWeb.equals(""))) {
        result  =  (civilite != null ? stringEncloser + civilite + stringEncloser : "");
        result += (prenom != null ? separator + stringEncloser + prenom + stringEncloser : separator);
        result += (deuxiemePrenom != null ? separator + stringEncloser + deuxiemePrenom + stringEncloser : separator);
        result += (nom != null ? separator + stringEncloser + nom + stringEncloser : separator);
        result += (suffixe != null ? separator + stringEncloser + suffixe + stringEncloser : separator);
        result += (societe != null ? separator + stringEncloser + societe + stringEncloser : separator);
        result += (service != null ? separator + stringEncloser + service + stringEncloser : separator);
        result += (titre != null ? separator + stringEncloser + titre + stringEncloser : separator);
        result += (rueBureau != null ? separator + stringEncloser + rueBureau + stringEncloser : separator);
        result += (rueBureau2 != null ? separator + stringEncloser + rueBureau2 + stringEncloser : separator);
        result += (rueBureau3 != null ? separator + stringEncloser + rueBureau3 + stringEncloser : separator);
        result += (villeBureau != null ? separator + stringEncloser + villeBureau + stringEncloser : separator);
        result += (depRegionBureau != null ? separator + stringEncloser + depRegionBureau + stringEncloser : separator);
        result += (codePostalBureau != null ? separator + stringEncloser + codePostalBureau + stringEncloser : separator);
        result += (paysBureau != null ? separator + stringEncloser + paysBureau + stringEncloser : separator);
        result += (rueDomicile != null ? separator + stringEncloser + rueDomicile + stringEncloser : separator);
        result += (rueDomicile2 != null ? separator + stringEncloser + rueDomicile2 + stringEncloser : separator);
        result += (rueDomicile3 != null ? separator + stringEncloser + rueDomicile3 + stringEncloser : separator);
        result += (villeDomicile != null ? separator + stringEncloser + villeDomicile + stringEncloser : separator);
        result += (depRegionDomicile != null ? separator + stringEncloser + depRegionDomicile + stringEncloser : separator);
        result += (codePostalDomicile != null ? separator + stringEncloser + codePostalDomicile + stringEncloser : separator);
        result += (paysDomicile != null ? separator + stringEncloser + paysDomicile + stringEncloser : separator);
        result += (rueAutre != null ? separator + stringEncloser + rueAutre + stringEncloser : separator);
        result += (rueAutre2 != null ? separator + stringEncloser + rueAutre2 + stringEncloser : separator);
        result += (rueAutre3 != null ? separator + stringEncloser + rueAutre3 + stringEncloser : separator);
        result += (villeAutre != null ? separator + stringEncloser + villeAutre + stringEncloser : separator);
        result += (depRegionAutre != null ? separator + stringEncloser + depRegionAutre + stringEncloser : separator);
        result += (codePostalAutre != null ? separator + stringEncloser + codePostalAutre + stringEncloser : separator);
        result += (paysAutre != null ? separator + stringEncloser + paysAutre + stringEncloser : separator);
        result += (telephoneDeLAssistantE != null ? separator + stringEncloser + telephoneDeLAssistantE + stringEncloser : separator);
        result += (telecopieBureau != null ? separator + stringEncloser + telecopieBureau + stringEncloser : separator);
        result += (telephoneBureau != null ? separator + stringEncloser + telephoneBureau + stringEncloser : separator);
        result += (telephone2Bureau != null ? separator + stringEncloser + telephone2Bureau + stringEncloser : separator);
        result += (rappel != null ? separator + stringEncloser + rappel + stringEncloser : separator);
        result += (telephoneVoiture != null ? separator + stringEncloser + telephoneVoiture + stringEncloser : separator);
        result += (telephonesociete != null ? separator + stringEncloser + telephonesociete + stringEncloser : separator);
        result += (telecopieDomicile != null ? separator + stringEncloser + telecopieDomicile + stringEncloser : separator);
        result += (telephoneDomicile != null ? separator + stringEncloser + telephoneDomicile + stringEncloser : separator);
        result += (telephone2Domicile != null ? separator + stringEncloser + telephone2Domicile + stringEncloser : separator);
        result += (rnis != null ? separator + stringEncloser + rnis + stringEncloser : separator);
        result += (telMobile != null ? separator + stringEncloser + telMobile + stringEncloser : separator);
        result += (telecopieAutre != null ? separator + stringEncloser + telecopieAutre + stringEncloser : separator);
        result += (telephoneAutre != null ? separator + stringEncloser + telephoneAutre + stringEncloser : separator);
        result += (recepteurDeRadiomessagerie != null ? separator + stringEncloser + recepteurDeRadiomessagerie + stringEncloser : separator);
        result += (telephonePrincipal != null ? separator + stringEncloser + telephonePrincipal + stringEncloser : separator);
        result += (radioTelephone != null ? separator + stringEncloser + radioTelephone + stringEncloser : separator);
        result += (telephoneTddTty != null ? separator + stringEncloser + telephoneTddTty + stringEncloser : separator);
        result += (telex != null ? separator + stringEncloser + telex + stringEncloser : separator);
        result += (adresseDeMessagerie != null ? separator + stringEncloser + adresseDeMessagerie + stringEncloser : separator);
        result += (typeDeMessagerie != null ? separator + stringEncloser + typeDeMessagerie + stringEncloser : separator);
        result += (nomCompletDeLAdresseDeMessagerie != null ? separator + stringEncloser + nomCompletDeLAdresseDeMessagerie + stringEncloser : separator);
        result += (adresseDeMessagerie2 != null ? separator + stringEncloser + adresseDeMessagerie2 + stringEncloser : separator);
        result += (typeDeMessagerie2 != null ? separator + stringEncloser + typeDeMessagerie2 + stringEncloser : separator);
        result += (nomCompletDeLAdresseDeMessagerie2 != null ? separator + stringEncloser + nomCompletDeLAdresseDeMessagerie2 + stringEncloser : separator);
        result += (adresseDeMessagerie3 != null ? separator + stringEncloser + adresseDeMessagerie3 + stringEncloser : separator);
        result += (typeDeMessagerie3 != null ? separator + stringEncloser + typeDeMessagerie3 + stringEncloser : separator);
        result += (nomCompletDeLAdresseDeMessagerie3 != null ? separator + stringEncloser + nomCompletDeLAdresseDeMessagerie3 + stringEncloser : separator);
        result += (anniversaire != null ? separator + stringEncloser + anniversaire + stringEncloser : separator);
        result += (anniversaireDeMariageOuFete != null ? separator + stringEncloser + anniversaireDeMariageOuFete + stringEncloser : separator);
        result += (autreBoitePostale != null ? separator + stringEncloser + autreBoitePostale + stringEncloser : separator);
        result += (bPProfessionnelle != null ? separator + stringEncloser + bPProfessionnelle + stringEncloser : separator);
        result += (boitePostaleDuDomicile != null ? separator + stringEncloser + boitePostaleDuDomicile + stringEncloser : separator);
        result += (bureau != null ? separator + stringEncloser + bureau + stringEncloser : separator);
        result += (categories != null ? separator + stringEncloser + categories + stringEncloser : separator);
        result += (codeGouvernement != null ? separator + stringEncloser + codeGouvernement + stringEncloser : separator);
        result += (compte != null ? separator + stringEncloser + compte + stringEncloser : separator);
        result += (conjointE != null ? separator + stringEncloser + conjointE + stringEncloser : separator);
        result += (critereDeDiffusion != null ? separator + stringEncloser + critereDeDiffusion + stringEncloser : separator);
        result += (disponibiliteInternet != null ? separator + stringEncloser + disponibiliteInternet + stringEncloser : separator);
        result += (emplacement != null ? separator + stringEncloser + emplacement + stringEncloser : separator);
        result += (enfants != null ? separator + stringEncloser + enfants + stringEncloser : separator);
        result += (informationsFacturation != null ? separator + stringEncloser + informationsFacturation + stringEncloser : separator);
        result += (initiales != null ? separator + stringEncloser + initiales + stringEncloser : separator);
        result += (kilometrage != null ? separator + stringEncloser + kilometrage + stringEncloser : separator);
        result += (langue != null ? separator + stringEncloser + langue + stringEncloser : separator);
        result += (motsCles != null ? separator + stringEncloser + motsCles + stringEncloser : separator);
        result += (nomDeLAssistantE != null ? separator + stringEncloser + nomDeLAssistantE + stringEncloser : separator);
        result += (notes != null ? separator + stringEncloser + notes + stringEncloser : separator);
        result += (numeroDIdentificationDeLOrganisation != null ? separator + stringEncloser + numeroDIdentificationDeLOrganisation + stringEncloser : separator);
        result += (pageWeb != null ? separator + stringEncloser + pageWeb + stringEncloser : separator);
        result += (passeTemps != null ? separator + stringEncloser + passeTemps + stringEncloser : separator);
        result += (priorite != null ? separator + stringEncloser + priorite + stringEncloser : separator);
        result += (prive != null ? separator + stringEncloser + prive + stringEncloser : separator);
        result += (profession != null ? separator + stringEncloser + profession + stringEncloser : separator);
        result += (recommandePar != null ? separator + stringEncloser + recommandePar + stringEncloser : separator);
        result += (responsable != null ? separator + stringEncloser + responsable + stringEncloser : separator);
        result += (serveurDAnnuaire != null ? separator + stringEncloser + serveurDAnnuaire + stringEncloser : separator);
        result += (sexe != null ? separator + stringEncloser + sexe + stringEncloser : separator);
        result += (utilisateur1 != null ? separator + stringEncloser + utilisateur1 + stringEncloser : separator);
        result += (utilisateur2 != null ? separator + stringEncloser + utilisateur2 + stringEncloser : separator);
        result += (utilisateur3 != null ? separator + stringEncloser + utilisateur3 + stringEncloser : separator);
        result += (utilisateur4 != null ? separator + stringEncloser + utilisateur4 + stringEncloser : separator);

        return result;
    } else return null;
}

private void formatName() {
    if (this.nom != null && !this.nom.equals("")) {
        this.nom = this.nom.trim();
        if (this.nom.contains(", ")) {
            this.nom.replaceAll(", ", " ");
        }
        if (this.prenom != null && !this.prenom.equals("")) {
            if (this.prenom.contains(", ")) {
                this.prenom.replaceAll(", ", " ");
            }
            if (this.nom.toLowerCase().equals(this.prenom.toLowerCase())) {
                this.prenom=null;
            } else {
                if (this.prenom.length()>3) {
                    while (this.nom.toLowerCase().contains(this.prenom.toLowerCase())) {
                        int i = this.nom.toLowerCase().indexOf(this.prenom.toLowerCase());
                        this.nom = (this.nom.substring(0, i)).trim() + " " + (this.nom.substring(i+this.prenom.length())).trim();
                    }
                }
            }
        }
        if (this.nom.trim().length()==1) {
            this.nom = this.prenom + this.nom.trim();
            this.prenom = null;
        }
        if (this.deuxiemePrenom != null && !this.deuxiemePrenom.equals("")) {
            if (this.deuxiemePrenom.contains(", ")) {
                this.deuxiemePrenom.replaceAll(", ", " ");
            }
            if (this.deuxiemePrenom.length()>3) {
                while (this.nom.toLowerCase().contains(this.deuxiemePrenom.toLowerCase())) {
                    int i = this.nom.toLowerCase().indexOf(this.deuxiemePrenom.toLowerCase());
                    this.nom = (this.nom.substring(0, i)).trim() + " " + (this.nom.substring(i+this.deuxiemePrenom.length())).trim();
                }
            }
        }
        this.nom = this.nom.trim();
    }
}

private void formatEmail() {
    if (this.nom != null && !this.nom.equals("") && this.prenom != null && !this.prenom.equals(""))
        return;
    if (this.nom != null && !this.nom.equals("")) {
        if (this.nomCompletDeLAdresseDeMessagerie != null && this.nomCompletDeLAdresseDeMessagerie.contains(this.nom)) {
            String s = eMailName(this.nomCompletDeLAdresseDeMessagerie);
            while (s.contains(this.nom)) {
                int i = s.indexOf(this.nom);
                s = (s.substring(0, i)).trim() + " " + (s.substring(i+this.nom.length())).trim();
            }
            this.prenom=s.trim();
        }
        if ((this.prenom == null || this.prenom.equals("")) && this.nomCompletDeLAdresseDeMessagerie2 != null && this.nomCompletDeLAdresseDeMessagerie2.contains(this.nom)) {
            String s = eMailName(this.nomCompletDeLAdresseDeMessagerie2);
            while (s.contains(this.nom)) {
                int i = s.indexOf(this.nom);
                s = (s.substring(0, i)).trim() + " " + (s.substring(i+this.nom.length())).trim();
            }
            this.prenom=s.trim();
        }
        if ((this.prenom == null || this.prenom.equals("")) && this.nomCompletDeLAdresseDeMessagerie3 != null && this.nomCompletDeLAdresseDeMessagerie3.contains(this.nom)) {
            String s = eMailName(this.nomCompletDeLAdresseDeMessagerie3);
            while (s.contains(this.nom)) {
                int i = s.indexOf(this.nom);
                s = (s.substring(0, i)).trim() + " " + (s.substring(i+this.nom.length())).trim();
            }
            this.prenom=s.trim();
        }
        if (this.prenom != null && this.prenom.equals("")) this.prenom=null;
    }
    if ((this.nom==null || this.nom.equals("")) && this.nomCompletDeLAdresseDeMessagerie2!=null && !this.nomCompletDeLAdresseDeMessagerie2.equals(""))
        this.nom = this.nomCompletDeLAdresseDeMessagerie2;
    if ((this.nom==null || this.nom.equals("")) && this.nomCompletDeLAdresseDeMessagerie!=null && !this.nomCompletDeLAdresseDeMessagerie.equals(""))
        this.nom = this.nomCompletDeLAdresseDeMessagerie;
    if ((this.nom==null || this.nom.equals("")) && this.nomCompletDeLAdresseDeMessagerie3!=null && !this.nomCompletDeLAdresseDeMessagerie3.equals(""))
        this.nom = this.nomCompletDeLAdresseDeMessagerie3;
    if (this.adresseDeMessagerie != null && !this.adresseDeMessagerie.equals(""))
        this.nomCompletDeLAdresseDeMessagerie=this.getNom();
    if (this.adresseDeMessagerie2 != null && !this.adresseDeMessagerie2.equals(""))
        this.nomCompletDeLAdresseDeMessagerie2=this.getNom();
    if (this.adresseDeMessagerie3 != null && !this.adresseDeMessagerie3.equals(""))
        this.nomCompletDeLAdresseDeMessagerie3=this.getNom();
}

private String formatTelephone(String numero) {
    if (numero == null || numero.equals("")) return null;
    
    String result;
    if (numero.startsWith("'+")) {
        result = numero.substring(1);
    } else if (numero.startsWith("(0")) {
        result = "+33" + numero.charAt(2) + numero.substring(4);
    } else if (numero.startsWith("+33(0")) {
        result = "+33" + numero.charAt(4) + numero.substring(6);
    } else if (numero.startsWith("00")) {
        result="+" + numero.substring(3);
    } else if (numero.startsWith("0")) {
        result="+33" + numero.substring(2);
    } else
        result = numero;
    result = result.replaceAll("[ ]", "");
    return result;
}
private String eMailAdress(String email) {
    if (email == null || email.equals("")) return null;
    
    int i = email.indexOf(' ');
    if (i==-1) return email;
    int i2 = email.indexOf('@');
    if (i2==-1 || email.indexOf('.',i2)==-1) return null;
    return email.substring(0, i);
}
private String eMailName(String email) {
    if (email == null || email.equals("")) return null;
    
    int i1 = email.indexOf('(');
    if (i1==-1) i1 = email.length();

    if (email.substring(0,i1).indexOf('@') != -1)
        return this.prenom + " " + this.nom;
    return email.substring(0, i1-1).trim();
}
// TODO permettre la sélection du type de codage de séparateurs

    public void setId(int id) {
        this.id=id;
    }

    public int getId() {
        return this.id;
    }

    public void setTelephones(HashMap<String, typeTelephone> telephones) {
        this.telephones = telephones;
    }

    public HashMap<String, typeTelephone> getTelephones() {
        return telephones;
    }

    public void setEmails(HashMap<String, String> emails) {
        this.emails = emails;
    }

    public HashMap<String, String> getEmails() {
        return emails;
    }
}
